package com.promise.jokerdream

import android.app.Application
import com.promise.jokerdream.utils.AppContext
import com.promise.jokerdream.work.manager.TimerWorkManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel

/**
 * 自定义 Application 类
 * 负责管理全局协程作用域和应用级别的初始化
 */
class JokerDreamApplication : Application() {
    
    /**
     * 全局协程作用域，与 Application 生命周期绑定
     * 使用 SupervisorJob 确保子协程失败不会影响其他协程
     * 使用 Dispatchers.Default 在后台线程执行
     */
    val applicationScope = CoroutineScope(SupervisorJob() + Dispatchers.Default)
    
    override fun onCreate() {
        super.onCreate()
        
        // 初始化应用Context
        AppContext.init(this)
        
        // 启动定时器工作管理器
        TimerWorkManager.getInstance().startTimer()
    }
    
    override fun onTerminate() {
        super.onTerminate()
        
        // 停止定时器工作管理器
        TimerWorkManager.getInstance().destroy()
        
        // 应用终止时取消全局协程作用域
        applicationScope.cancel()
    }
}
